package com.jboost.modules.app.controller;

import com.alibaba.fastjson.JSONObject;
import com.google.common.base.Objects;
import com.google.common.collect.Maps;
import com.jboost.common.api.vo.Result;
import com.jboost.common.util.HttpRestUtils;
import com.jboost.modules.app.constant.BaseResult;
import com.jboost.modules.app.constant.FeishuTzEnum;
import com.jboost.modules.app.dto.MoodytigerNoiceDto;
import com.jboost.modules.app.util.EnumUtils;
import com.jboost.modules.app.util.StrategyFactory;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.time.DateUtils;
import org.springframework.http.HttpHeaders;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.text.SimpleDateFormat;
import java.util.*;

@Api(tags = "飞书")
@RestController
@RequestMapping("/feishu")
@Slf4j
@AllArgsConstructor
public class FeiShuController {


   final String feiShuUrl = "https://www.feishu.cn/flow/api/trigger-webhook/0797551cf988587361533fe05cbcde81";



    StrategyFactory strategyFactory;

    @PostMapping(value = "/push")
    @ApiOperation(value = "数据推送", notes = "数据推送")
    public Result<Boolean> push(@RequestBody JSONObject jsonObject, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        LinkedHashMap data = (LinkedHashMap) jsonObject.get("data");
        //应用id
        String url = (String)data.get("url");
        MoodytigerNoiceDto moodytigerNoiceDto = new MoodytigerNoiceDto();
        String descByType = FeishuTzEnum.getByType(url);
        HashMap<String, Object> param = Maps.newHashMap();
        param.put("content",data.get("content"));
        String content = (String)data.get("content");
        String notice = "";
        if (Objects.equal(FeishuTzEnum.A.getDesc(),descByType) || Objects.equal(FeishuTzEnum.B.getDesc(),descByType)){
            String[] split = content.split("\\r?\\n");
            for (String s:split) {
                if (s.contains("项目")) {
                    param.put("xm", getRealzValue(s));
                }
                if (s.contains("阶段")) {
                    param.put("jieDuan", getRealzValue(s));
                }
                if (s.contains("接收部门")) {
                    param.put("bm",getRealzValue(s));
                }
                if (s.contains("输出部门")) {
                    param.put("scbm", getRealzValue(s));
                }
                if (s.contains("输出责任人")) {
                    param.put("sczrr", getRealzValue(s));
                }
                if (s.contains("要求完成时间")) {
                    String date = (String) getRealzValue(s);
                    param.put("wcsj", date);
                    Date fDate = sdf.parse(date);
                    Date oDate = new Date();
                    Calendar aCalendar = Calendar.getInstance();
                    aCalendar.setTime(fDate);
                    int day1 = aCalendar.get(Calendar.DAY_OF_YEAR);
                    aCalendar.setTime(oDate);
                    int day2 = aCalendar.get(Calendar.DAY_OF_YEAR);
                    int days = day1 - day2;
                    param.put("days", days + "");

                }
            }

        }else if (Objects.equal(FeishuTzEnum.C.getDesc(),descByType)){
            String[] split = content.split("\\r?\\n");
            for (String s:split) {
                if (s.contains("款式衣长")) {
                    String realzValue = getRealzValue(s);
                    param.put("ks", realzValue);
                }
            }
        }
        else if (Objects.equal(FeishuTzEnum.D.getDesc(),descByType)){
            String[] split = content.split("\\r?\\n");
            for (String s:split) {
                if (s.contains("款号")) {
                    String realzValue = getRealzValue(s);
                    param.put("ks", realzValue);
                }
            }
        }
        else if (Objects.equal(FeishuTzEnum.E.getDesc(),descByType)){
            String[] split = content.split("\\r?\\n");
            for (String s:split) {
                if (s.contains("期望交付日期")) {
                    String realzValue = getRealzValue(s);
                    param.put("days", realzValue);
                }
            }
        }

        else if (Objects.equal(FeishuTzEnum.F.getDesc(),descByType)){
            String[] split = content.split("\\r?\\n");
            for (String s:split) {
                if (s.contains("需求提出时间")) {
                    String realzValue = getRealzValue(s);
                    param.put("days", realzValue);
                }
            }
        }
        else if (Objects.equal(FeishuTzEnum.G.getDesc(),descByType)){
            notice = "面料开发任务即将到截止日期，请尽快完成开发";
        }
        else if (Objects.equal(FeishuTzEnum.H.getDesc(),descByType)){
            notice = "面料开发任务即将到截止日期，请尽快完成开发";
        }
        else if (Objects.equal(FeishuTzEnum.I.getDesc(),descByType)){
            notice = "样衣即将到归还日期，请及时归还";
        }
        else if (Objects.equal(FeishuTzEnum.M.getDesc(),descByType)){
            notice = "样衣即将到归还日期，请及时归还";
        }

        notice = (String) data.get("notify_text");

        ArrayList<LinkedHashMap> list = (ArrayList<LinkedHashMap>) data.get("to");
        List<String> memberBeans = new ArrayList<>();
        list.forEach(e->{
            MoodytigerNoiceDto.MemberBean memberBean = new MoodytigerNoiceDto.MemberBean();

            String name = (String) e.get("name");
            String username = (String) e.get("username");
            memberBean.setName(getParaMap(name));
            memberBean.setUsername(getParaMap(username));
            memberBeans.add(username);
        });

        moodytigerNoiceDto.setNotice(getParaMap(notice));
        moodytigerNoiceDto.setMember(getParaMap(memberBeans));
        StrategyFactory.invokeStrategy(moodytigerNoiceDto,"fsTmoodytiger");

        String post = HttpRestUtils.post(descByType, param, new HttpHeaders());
        return Result.OK();
    }


    public Map<String, Object> getParaMap(Object o) {
        Map map = Maps.newHashMap();
        map.put("value",o);
        return map;
    }

    private String getRealzValue(String s) {
        try {
            int i = s.indexOf(": ");
            return s.substring(i+2, s.length());
        }catch (Exception e){
            return "";
        }
    }

    //    //
    //    //简单云账号：moodytiger 通过飞书扫码登录（具体系统管理员权限）
    //    //
    //    //1、表单1 （公司OTT明细）
    //    //（1）地址：https://www.jiandaoyun.com/dashboard/app/64e1f2d0d8b6100009e88053/form/64e71a298845580008732e53/edit#/edit
    //    //（2）消息模板-带格式：
    //    //字段：项目、阶段、部门、输出部门、输出责任人、要求完成时间
    //    //文本：OTT进度还有xx天到期，请及时关注处理
    //    //
    //    //2、表单2（部门OTT计划）
    //    //（1）地址：https://www.jiandaoyun.com/dashboard#/app/64e1f2d0d8b6100009e88053/form/64f604cb4e1d6a0007f1cebb
    //    //（2）消息模板-带格式：
    //    //字段：项目、阶段、部门、输出部门、输出责任人、要求完成时间
    //    //文本：OTT进度还有xx天到期，请及时关注处理
    //    //
    //    //3、表单3（慕迪产品报价单）
    //    //（1）地址：https://www.jiandaoyun.com/dashboard#/app/64e1f2d0d8b6100009e88053/form/64d9dd631ab7490007520128
    //    //（2）消息模板-纯文本：
    //    //xx款式的成本过高，请及时关注
    //    //
    //    //4、表单4（版单设计）
    //    //（1）地址：https://www.jiandaoyun.com/dashboard#/app/64e1f2d0d8b6100009e88053/form/64b89ecaf7997d00085e492e
    //    //（2-1）消息模板1-纯文本：
    //    //xx款式即将到截止日期，请尽快完成版单设计
    //    //（2-2）消息模板2-纯文本：
    //    //xx款式的BOM清单有修改，请及时关注
    //    //
    //    //5、表单5（打样任务）
    //    //（1）地址：https://www.jiandaoyun.com/dashboard/app/64e1f2d0d8b6100009e88053/form/64e3c8644e3b0a000a0ac60e/edit#/extension/notify
    //    //（2）消息模板-纯文本：
    //    //距离预计回样⽇期还有xx天，请注意及时完成任务
    //    //
    //    //6、表单6（外协工艺流程）
    //    //（1）地址：https://www.jiandaoyun.com/dashboard#/app/64e1f2d0d8b6100009e88053/form/64e30923677b9d0008c4bcf0
    //    //（2）消息模板-纯文本：
    //    //距离预计回样⽇期还有xx天，请注意及时完成任务
    //    //
    //    //7、表单7（面料开发任务）
    //    //（1）地址：https://www.jiandaoyun.com/dashboard#/app/64e1f2d0d8b6100009e88053/form/648f0c0f0f4aad0008648974
    //    //（2）消息模板-纯文本：
    //    //面料开发任务即将到截止日期，请尽快完成开发
    //    //
    //    //8、表单8（辅料开发任务）
    //    //（1）地址：https://www.jiandaoyun.com/dashboard#/app/64e1f2d0d8b6100009e88053/form/64e1d6429eda3f0007d0268a
    //    //（2）消息模板-纯文本：
    //    //面料开发任务即将到截止日期，请尽快完成开发
    //    //
    //    //9、表单9（样衣领用出库）
    //    //（1）地址：https://www.jiandaoyun.com/dashboard#/app/64e1f2d0d8b6100009e88053/form/64e0bebfcd78df0008ba4134
    //    //（2）消息模板-纯文本：
    //    //样衣即将到归还日期，请及时归还
    //    //
    //    //10、表单10（样衣领用出库）
    //    //（1）地址：https://www.jiandaoyun.com/dashboard#/app/64e1f2d0d8b6100009e88053/form/64e0bebfcd78df0008ba4134
    //    //（2）消息模板-纯文本：
    //    //样衣即将到归还日期，请及时归还



}
